package cxydmmszl.chapter05.t077;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * <li style="color: red;">Prob</li>
 * 判断两个字符串是否为变形词
 * <li style="color: green;">Desc</li>
 * 给定两个字符串str1和str2，如果str1和str2中出现的字符种类出现的一样且每种字符出现的次数也一样，那么str1和str2互为变形词。请判断str1和str2是否为变形词。
 * <li style="color: green;">Input</li>
 * 输入包括3行，第一行包含两个整数n，m(1≤n,m≤10^5)分别代表str1和str2的长度，第二行和第三行为两个字符串，分别代表str1和str2。
 * <li style="color: green;">Output</li>
 * 如果str1和str2互为变形词，请输出“true”，否则输出“false”。
 * <li style="color: blue;">Link</li> CD95
 *
 * @author habitplus
 * @since 2021-09-08 13:45
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] ss = bf.readLine().split(" ");
        int n = Integer.parseInt(ss[0]);
        int m = Integer.parseInt(ss[1]);

        String s1 = bf.readLine();
        String s2 = bf.readLine();
        bf.close();

        if (n != m) {
            System.out.println(false);
            return;
        }

        System.out.println(isDeformation(s1, s2));

    }

    private static boolean isDeformation(String s1, String s2) {
        if (s1 == null || s2 == null || s1.length() == 0 || s1.length() != s2.length()) {
            return false;
        }

        int[] map = new int[256];
        for (char c : s1.toCharArray()) {
            map[c]++;
        }
        for (char c : s2.toCharArray()) {
            if (map[c] == 0) {
                return false;
            }
            map[c]--;
        }
        return true;
    }
}
